How HySoP deals with computational graphs of operators

Inheritance diagram of hysop.core.graph.computational_node.ComputationalGraphNode, hysop.core.graph.computational_graph.ComputationalGraph, hysop.core.graph.node_generator.ComputationalGraphNodeGenerator, hysop.core.graph.computational_operator.ComputationalGraphOperator, hysop.core.graph.computational_node_frontend.ComputationalGraphNodeFrontend, hysop.operator.directional.directional.DirectionalOperatorBase, hysop.operator.directional.directional.DirectionalOperatorGenerator, hysop.operator.directional.directional.DirectionalOperatorFrontend, hysop.numerics.splitting.directional_splitting.DirectionalSplitting, hysop.problem.Problem

Inheritance diagram for HySoP computational graphs.

HySoP library is designed for the user to manipulate only operators and problems. It internally build a directed graph of operators (low level computations or data operations) for running a single a solver iteration. Therefore, solving a Problem means running iteratively the graph traversal. Order of inserting elements in the Problem using insert() (or graph using push_nodes()) is important.

Two kind of object can be inserted into a graph:

We distinguish directional operators from operators. Directional operators must split into several operators (at least one per spatial directions) using a DirectionalSplitting. The nested operators are sharing a common basis: DirectionalOperatorBase that are generated by DirectionalOperatorGenerator. Directional operators generators will automatically insert also transposition operators (see Temporary work arays in HySoP).